package com.saxion.controller;

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.saxion.model.Bestelling;
import com.saxion.model.Product;

public class Main {
	
	public static void main(String[] args) {
		
			ApplicationContext context = new ClassPathXmlApplicationContext(
					"/com/saxion/config/middleware-spring.xml");
			SaktiehuisServiceImpl saktiehuisService = (SaktiehuisServiceImpl) context.getBean("SaktiehuisService");
			
			/*
			Product p = saktiehuisService.productDao.addProduct(new Product("bescrhving0", 2.02,"test"));
			System.out.println("Het gaat nu ");
			int bestelnr = saktiehuisService.nieuweBestelling("Kevin");
			saktiehuisService.bestelProduct(bestelnr, "Kevin", p, 2);
			System.out.println(saktiehuisService.getBesteloverzicht("Kevin", bestelnr));
			*/
			
			printMenu();
			String input = readLine();
			while (!input.equals("exit")) {
				try {
					int menuKeuze = Integer.parseInt(input);
					switch (menuKeuze) {
					case 1:
						
						input = getProductenLijst(saktiehuisService);
						break;
					case 2:
						input = nieuweBestelling(saktiehuisService);
						break;
					case 3:
						System.out.println("Uw bestellingnummer is : ");
						int bestelnr = 0;
						int productCode = 0;
						int aantal = 0;
						try {
							bestelnr = Integer.parseInt(readLine());
							System.out
									.println("Welke productcode wilt u bestellen");
							productCode = Integer.parseInt(readLine());
							System.out
									.println("Hoeveel producten wilt u bestellen");
							aantal = Integer.parseInt(readLine());
						} catch (NumberFormatException e) {
							System.out.println("Geen geldig getal");
						}

						try{
							saktiehuisService.bestelProduct(bestelnr, productCode, aantal);
						
							System.out
									.println("Uw bestelling is goed doorgevoerd");
						} catch( Exception e) {
							System.out
									.println("Er is iets mis gegaan met de bestelling");
						}
						System.out.println("Druk enter om door te gaan");
						break;
					case 4:
						System.out.println("Voer de klantnaam in");
						String name = readLine();
						System.out.println("Voer de bestellingnummer in : ");
						int bestelnr1 = Integer.parseInt(readLine());
						
						double total = 0.0;
						Bestelling bestelling = saktiehuisService.getBesteloverzicht(name, bestelnr1);
						
						System.out.println( bestelling.toString());
						System.out.println("Druk enter om door te gaan");
						break;
					case 5:
						System.out.println("Voer de klantnaam in");
						String klantNaam = readLine();
						System.out.println("Voer het bestellingnummer in : ");
						int bestelNum = Integer.parseInt(readLine());
						if (saktiehuisService.bevestigBestelling(bestelNum, klantNaam)) {
							System.out.println("De bestelling is bevestigd");
						} else {
							System.out
									.println("De bestelling is niet bevestigd, of de gegevens kloppen niet");
						}
						break;
					case 6:
						System.out.println("Voer beschrijving in");
						String beschrijving = readLine();
						System.out.println("Voer productsoort in");
						String soort = readLine();
						double prijs = 0.0;
						System.out.println("Voer prijs in");
						try{
								prijs = Double.parseDouble(readLine());
								saktiehuisService.addProduct(beschrijving, prijs, soort);
						}catch(NumberFormatException e){
							System.out.println("Geen getal ingevoerd, toevoegen mislukt");
						}
						
						break;
					default:
						System.out.println("Geen geldig menuitem gekozen");
						System.out.println("Druk enter om door te gaan");
						break;
					}
				} catch (Exception e) {
					System.out.println("Geen geldige input");
					System.out.println("Druk enter om door te gaan");
					e.printStackTrace();
				}
				readLine();
				printMenu();
				input = readLine();
			}
	}

	private static String nieuweBestelling(
			SaktiehuisServiceImpl saktiehuisService) {
		String input;
		System.out.println("Voer uw klantnaam in");
		input = readLine();
		
		int bestelNummer = saktiehuisService.nieuweBestelling(input);
		if (bestelNummer < 0) {
			System.out
					.println("Klant naam bestaat al, klant kan maar 1 bestelling hebben");
		}
		System.out.println("Uw bestellingnummer is : "
				+ bestelNummer);
		System.out.println("Druk enter om door te gaan");
		return input;
	}

	private static String getProductenLijst(SaktiehuisService sAktieHuisService) {
		String input;
		System.out
				.println("Typ een soort in, bij leeg: Alles terug");
		input = readLine();
		if(input.isEmpty()){
			input = "";
		}
		for (Product p : sAktieHuisService.getProductenlijst(input)) {
			System.out.println(p.toString());
		}
		return input;
	}

	public static void printMenu() {
		System.out.println("Kies 1 van de volgende opties");
		System.out.println("1. GetProductenLijst");
		System.out.println("2. NieuweBestelling");
		System.out.println("3. BestelProduct");
		System.out.println("4. BestelOverzicht");
		System.out.println("5. BevestigBestelling");
		System.out.println("6. Voeg product toe");
		System.out.println("Exit: exit");
	}

	public static String readLine() {
		String s = "";
		try {
			InputStreamReader converter = new InputStreamReader(System.in);
			BufferedReader in = new BufferedReader(converter);
			s = in.readLine();
		} catch (Exception e) {
			System.out.println("Error! Exception: " + e);
		}
		return s;
	}
}
